package ThirdTier.Serveur;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.sql.Date;
import java.util.ArrayList;
import java.util.List;

import au.com.bytecode.opencsv.CSVWriter;

public class DonneesCsv {
	
	/* CHEMIN DES CSV */
	private static String csvFileGazouillis = "src/Gazouillis.csv";
	private static String csvFileUtilisateurs = "src/Utilisateurs.csv";
	
	/***** C H A R G E M E N T 
	 * @throws ClassNotFoundException ******/
	
	/* Chargement de la liste des utilisateurs à partir du fichier CSV */
	public static List<Utilisateur> listeUtilisateurs() throws ClassNotFoundException {

		List<Utilisateur> listeUtilisateurs = new ArrayList<>();
		BufferedReader br = null;
		String line = "";
		String cvsSplitBy = ",";

		try {
			br = new BufferedReader(new FileReader(csvFileUtilisateurs));
			while ((line = br.readLine()) != null) {
				String[] utilisateur = line.split(cvsSplitBy);
				Utilisateur newUser = (Utilisateur) SerializationObject.fromString(utilisateur[1]);
				listeUtilisateurs.add(newUser);
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (br != null) {
				try {
					br.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		return listeUtilisateurs;
	}
	/* Chargement de la liste des gazouillis à partir du fichier CSV */
	public List<Gazouilli> listeGazouillis() throws ClassNotFoundException {

		List<Gazouilli> listeGazouillis = new ArrayList<>();
		BufferedReader br = null;
		String line = "";
		String cvsSplitBy = ",";

		try {
			br = new BufferedReader(new FileReader(csvFileGazouillis));
			while ((line = br.readLine()) != null) {
				String[] gazouilli = line.split(cvsSplitBy);
				Gazouilli newGazouilli = (Gazouilli) SerializationObject.fromString(gazouilli[1]);
				listeGazouillis.add(newGazouilli);
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (br != null) {
				try {
					br.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		return listeGazouillis;
	}
	
	/***** R E C U P E R A T I O N ******/
	
	// Récupere l'id du dernier utlisateur puis l'incrémente de 1
	public static int lastIdUtilisateur(){
		int i = 0;
		BufferedReader br = null;
		String line = "";
		String cvsSplitBy = ",";

		try {
			br = new BufferedReader(new FileReader(csvFileUtilisateurs));
			while ((line = br.readLine()) != null) {
				String[] utilisateur = line.split(cvsSplitBy);
				i = Integer.parseInt(utilisateur[0])+1;
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (br != null) {
				try {
					br.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	
		return i;
	}
	
	// Récupere l'id du dernier gazouilli puis l'incrémente de 1
	public static int lastIdGazouilli(){
		
		int i=1;
		BufferedReader br = null;
		String line = "";
		String cvsSplitBy = ",";

		try {
			br = new BufferedReader(new FileReader(csvFileGazouillis));
			while ((line = br.readLine()) != null) {
				String[] gazouilli = line.split(cvsSplitBy);
				i = Integer.parseInt(gazouilli[0])+1;
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (br != null) {
				try {
					br.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		return i;
	}
	
	/***** I N S E R T I O N ******/
	
	/* Insertion d'un utilisateur dans le fichier CSV */
	public static void insertUtilisateur(Utilisateur utilisateur) throws IOException{
		CSVWriter writer = new CSVWriter(new FileWriter(csvFileUtilisateurs, true), ',', CSVWriter.NO_QUOTE_CHARACTER);		 
		String [] unUtilisateur = (Integer.toString(utilisateur.getId()) + "," + SerializationObject.toString(utilisateur)).split(",");		 
		writer.writeNext(unUtilisateur);		 
		writer.close();
	}

	/* Insertion d'un gazouilli dans le fichier CSV */
	public static void insertGazouilli(Gazouilli gazouilli) throws IOException{
		CSVWriter writer = new CSVWriter(new FileWriter(csvFileUtilisateurs, true), ',', CSVWriter.NO_QUOTE_CHARACTER);		 
		String [] unGazouilli = (Integer.toString(gazouilli.getId()) + "," + SerializationObject.toString(gazouilli)).split(",");		 
		writer.writeNext(unGazouilli);		 
		writer.close();
	}
	
}